/**
 * BrandBigData.com Inc.
 * Copyright (c) 2016 All Rights Reserved.
 */
package com.qibao.toolkit.service;

import com.qibao.toolkit.exception.ExpressionExecuteException;
import com.qibao.toolkit.exception.ExpressionSyntaxException;

import java.util.List;
import java.util.Map;

/**
 * 表达式服务，负责执行表达式，抽取表达式中的变量
 *
 * @author xumin
 * @version $Id:ExpressionService.java, v0.1 2017/6/13 14:27 xumin
 */
public interface ExpressionService {

    /**
     * 执行表达式
     *
     * @param expression 表达式
     * @param params     表达式执行需要的变量
     * @return
     * @throws ExpressionExecuteException
     */
    String executeExpression(String expression, Map<String, Object> params) throws ExpressionExecuteException;

    /**
     * 抽取表达式中的变量
     *
     * @param expression 表达式
     * @return 变量列表
     * @throws ExpressionSyntaxException
     */
    List<String> extractVariables(String expression) throws ExpressionSyntaxException;

    /**
     * 表达式是否合法
     *
     * @param expression 表达式
     * @return 是否合法
     */
    boolean isValid(String expression);

}
